Skip to content

4.0 Middleware Overview

本章介绍 LangChain 中的中间件系统,让你能够精细控制 Agent 的执行过程。


什么是 Middleware?

Middleware(中间件) 提供了一种更紧密控制 Agent 内部行为的方式。它让开发者能够在 Agent 执行的多个生命周期点进行拦截和自定义。

"Middleware provides a way to more tightly control what happens inside the agent."


核心用途

用途说明示例
监控与分析追踪 Agent 行为日志、分析、调试
转换修改输入输出提示词修改、工具选择、输出格式化
弹性增强可靠性重试、降级、提前终止
安全与限制保护和约束速率限制、护栏、PII 检测

Agent 执行循环

Agent 的核心执行流程由三个步骤组成:

┌─────────────────────────────────────────────────────────┐
│                    Agent Loop                            │
├─────────────────────────────────────────────────────────┤
│                                                          │
│   ┌──────────────┐    ┌──────────────┐    ┌──────────┐  │
│   │  Model Call  │───►│ Tool Select  │───►│ Complete │  │
│   │              │    │ & Execute    │    │          │  │
│   └──────────────┘    └──────────────┘    └──────────┘  │
│          │                   │                  │       │
│          ▼                   ▼                  ▼       │
│   ┌──────────────────────────────────────────────────┐  │
│   │              Middleware Hooks                     │  │
│   │   before_model → after_model → wrap_tool_call    │  │
│   └──────────────────────────────────────────────────┘  │
│                                                          │
└─────────────────────────────────────────────────────────┘

执行步骤

  1. Model Call - 模型进行决策
  2. Tool Selection & Execution - Agent 选择并执行工具
  3. Completion - 当不再调用工具时,流程结束

中间件的作用:在每个步骤的前后暴露钩子,允许对 Agent 行为进行精细控制。


基本使用

中间件直接集成到 Agent 创建过程中:

python
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware

agent = create_agent(
    model="gpt-4o",
    tools=[search, calculate],
    middleware=[
        SummarizationMiddleware(max_tokens=4000),
    ]
)

多个中间件

可以组合多个中间件:

python
from langchain.agents.middleware import (
    SummarizationMiddleware,
    ModelCallLimitMiddleware,
    HumanInTheLoopMiddleware,
)

agent = create_agent(
    model="gpt-4o",
    tools=[my_tools],
    middleware=[
        SummarizationMiddleware(max_tokens=4000),
        ModelCallLimitMiddleware(max_calls=10),
        HumanInTheLoopMiddleware(tools=["send_email"]),
    ]
)

中间件执行顺序

请求进入


┌───────────────────────────────────────┐
│  Middleware 1: before_model           │
│  Middleware 2: before_model           │
│  Middleware 3: before_model           │
└───────────────────────────────────────┘


┌───────────────────────────────────────┐
│           Model Execution             │
└───────────────────────────────────────┘


┌───────────────────────────────────────┐
│  Middleware 3: after_model            │
│  Middleware 2: after_model            │
│  Middleware 1: after_model            │
└───────────────────────────────────────┘


响应返回
  • Before hooks:按添加顺序执行(先进先出)
  • After hooks:按相反顺序执行(后进先出)
  • Wrap hooks:像函数调用一样嵌套

中间件类型

内置中间件

LangChain 提供多种开箱即用的中间件:

类别中间件功能
上下文管理Summarization自动摘要对话历史
执行控制ModelCallLimit限制 API 调用次数
安全合规HumanInTheLoop人工审批
弹性ModelFallback模型降级

详见 4.1 Built-in Middleware

自定义中间件

当内置中间件不满足需求时,可以创建自定义中间件:

python
from langchain.agents import before_model

@before_model
def log_messages(state, runtime):
    """记录每次模型调用"""
    print(f"消息数: {len(state['messages'])}")
    return None

详见 4.2 Custom Middleware


常见使用场景

1. 防止无限循环

python
from langchain.agents.middleware import ModelCallLimitMiddleware

agent = create_agent(
    "gpt-4o",
    tools=[my_tools],
    middleware=[ModelCallLimitMiddleware(max_calls=20)]
)

2. 敏感操作审批

python
from langchain.agents.middleware import HumanInTheLoopMiddleware

agent = create_agent(
    "gpt-4o",
    tools=[send_email, delete_file],
    middleware=[
        HumanInTheLoopMiddleware(
            tools=["send_email", "delete_file"]
        )
    ]
)

3. 上下文管理

python
from langchain.agents.middleware import SummarizationMiddleware

agent = create_agent(
    "gpt-4o",
    tools=[my_tools],
    middleware=[
        SummarizationMiddleware(
            max_tokens=4000,
            summary_model="gpt-3.5-turbo"
        )
    ]
)

4. 错误恢复

python
from langchain.agents.middleware import ModelFallbackMiddleware

agent = create_agent(
    "gpt-4o",
    tools=[my_tools],
    middleware=[
        ModelFallbackMiddleware(
            fallback_model="gpt-3.5-turbo"
        )
    ]
)

本章内容

章节内容核心概念
4.1 Built-in Middleware内置中间件12+ 开箱即用的中间件
4.2 Custom Middleware自定义中间件装饰器、类、钩子

最佳实践

  1. 保持专注 - 每个中间件只做一件事
  2. 优雅处理错误 - 中间件中的错误不应导致整个 Agent 崩溃
  3. 注意顺序 - 中间件的执行顺序很重要
  4. 性能考虑 - 避免在中间件中执行耗时操作
  5. 测试充分 - 使用 LangSmith 进行集成测试

上一章3.7 Structured Output

下一节4.1 Built-in Middleware

基于 MIT 许可证发布。内容版权归作者所有。